package com.vimhe.easyimport.filter;

import com.vimhe.easyimport.config.bean.CellConfig;
import com.vimhe.easyimport.exception.ImportException;
import com.vimhe.easyimport.util.ValidateUtils;

import java.util.Map;

/**
 * 数据字典数据过滤器
 * <p>根据给定的数据字典对数据进行过滤并输出过滤后的字符串</p>
 *
 * @author Vimhe
 */
public abstract class AbstractCodeFilter implements DataFilter {

    @Override
    public Object filter(CellConfig cellConfig, Object cellValue) {
        String type = cellConfig.getCode();
        if (ValidateUtils.isEmpty(type)) {
            return cellValue;
        }

        Map<String, String> code = getCodeMap().get(type);
        if (code == null) {
            throw new ImportException("发现数据字典中没有的代码，无法进行转换：" + type);
        }

        return code.get(String.valueOf(cellValue));
    }

    /**
     * 获取数据字典<br>
     * <pre>
     *     Map type, Map name, value  <br>
     *     Map 码值类型, Map 代码名称, 码值
     * </pre>
     *
     * @return 数据字典
     */
    protected abstract Map<String, Map<String, String>> getCodeMap();

}
